/*
    定义日志消息类，进行日志中间信息的存储
        1.日志的输出时间 用于过滤日志输出时间
        2.日志等级       用于进行日志过滤分析
        3.源文件名称
        4.源代码行号     用于定位出现错误的代码位置
        5.线程ID         用于过滤出错的线程
        6.日志主体消息
        7.日志器名称
*/
#ifndef __M_MSG_H__
#define __M_MSG_H__
#include "level.hpp"
#include "util.hpp"
#include <iostream>
#include <string>
#include <thread>
#include <memory>

namespace yuanlog
{
    struct LogMsg
    {
        // size_t _ctime;//日志产生的时间戳
        // LogLevel::value _level;//日志等级
        // size_t _line;//行号
        // std::thread::id _tid;//线程ID
        // std::string _file;//源码文件名
        // std::string _logger;//日志器名称
        // std::string _payload;//有效消息数据

        // logMsg(LogLevel::value level,
        //         size_t line,
        //         const std::string file,
        //         const std::string logger,
        //         const std::string msg)
        //         :_ctime(util::Date::Now()),
        //          _level(level),
        //          _line(line),
        //          _tid(std::this_thread::get_id()),
        //          _file(file),
        //          _logger(logger),
        //          _payload(msg)
        //         {}
        using ptr = std::shared_ptr<LogMsg>;
        size_t _line;           // 行号
        size_t _ctime;          // 时间
        std::thread::id _tid;   // 线程ID
        std::string _name;      // 日志器名称
        std::string _file;      // 文件名
        std::string _payload;   // 日志消息
        LogLevel::value _level; // 日志等级
        LogMsg( std::string &name, 
                std::string file, size_t line, 
                std::string &&payload,
                LogLevel::value level) 
                : _name(name), _file(file)
                , _payload(std::move(payload))
                , _level(level)
                , _line(line)
                , _ctime(util::Date::Now())
                , _tid(std::this_thread::get_id())
        {
            // std::cout << "构造msg\n";
        }
    };
};

#endif